iconview: Fix updates with filter models
authorMatthias Clasen <mclasen@redhat.com>
Fri, 19 Jan 2018 15:04:18 +0000 (16:04 +0100)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 19 Jan 2018 20:29:13 +0000 (23:29 +0300)
Filter models rely on views taking a ref on every node
they care about. GtkIconView was not doing that. Amazingly,
this has never shown up in a bug so far, until I spotted
the fallout in gnome-font-viewer.

gtk/gtkiconview.c

index 0ace6ce96533c8c73c673b39b3edb9ddacd049d1..86be6f8c420be2847b04f006711e5409ba87c62e 100644 (file)
@@ -3270,6 +3270,8 @@ gtk_icon_view_row_inserted (GtkTreeModel *model,
   if (gtk_tree_path_get_depth (path) > 1)
     return;
 
+  gtk_tree_model_ref_node (model, iter);
+
   index = gtk_tree_path_get_indices(path)[0];
 
   item = gtk_icon_view_item_new ();
@@ -3306,11 +3308,15 @@ gtk_icon_view_row_deleted (GtkTreeModel *model,
   GtkIconViewItem *item;
   GList *list, *next;
   gboolean emit = FALSE;
+  GtkTreeIter iter;
 
   /* ignore changes in branches */
   if (gtk_tree_path_get_depth (path) > 1)
     return;
 
+  gtk_tree_model_get_iter (model, &iter, path);
+  gtk_tree_model_unref_node (model, &iter);
+
   index = gtk_tree_path_get_indices(path)[0];
 
   list = g_list_nth (icon_view->priv->items, index);